Caderno de aulas
  • APRESENTAÇÃO
  • Aula 1
  • Aula 2
  • Aula 3
  • Aula 4
  • Aula 5
  • Aula 6
  • Aula de Mapa

On this page

  • Importação, Manipulação e Visualização de Dados com o R
    • Filtragem, Agrupamento e Contagem
  • Visualização de Dados com ggplot2
    • Visualização de Dados Categóricos com ggplot2
    • Gráficos de Boxplot para Dados Quantitativos

Importação, Manipulação e Visualização de Dados com o R

Nesta aula, são apresentados diferentes métodos para importar, visualizar, manipular e representar graficamente dados a partir de diversas fontes, incluindo arquivos do Excel (com extensões .xlsx e .xls), arquivos no formato .csv e planilhas hospedadas no Google Sheets.

Arquivos Excel

Para importar uma planilha do Excel com múltiplas abas, utiliza-se a função read_excel() do pacote readxl. O arquivo deve estar na mesma pasta do seu projeto.

library(readxl)
library(tidyverse)
dados <-read_excel("dados-diversos.xlsx")
dados
# A tibble: 70 × 5
   Cultura   rep Assess LeafDoctor ImageJ
   <chr>   <dbl>  <dbl>      <dbl>  <dbl>
 1 Rosa       21  20.0        31.6  26.0 
 2 Rosa       22   4.77       13.5   5.16
 3 Rosa       23  72.1        77.6  69.5 
 4 Rosa       24  81.4        90.8  82.7 
 5 Rosa       25  25.8        24.5  13.1 
 6 Rosa       26  80.4        73.8  69.9 
 7 Rosa       27  81.7        86.8  88.7 
 8 Rosa       28   7.02       14.0   6.4 
 9 Rosa       29  11.2        16.0  10.8 
10 Rosa       30  79.1        77.0  78.2 
# ℹ 60 more rows
str(dados)
tibble [70 × 5] (S3: tbl_df/tbl/data.frame)
 $ Cultura   : chr [1:70] "Rosa" "Rosa" "Rosa" "Rosa" ...
 $ rep       : num [1:70] 21 22 23 24 25 26 27 28 29 30 ...
 $ Assess    : num [1:70] 19.95 4.77 72.11 81.37 25.78 ...
 $ LeafDoctor: num [1:70] 31.6 13.5 77.6 90.8 24.5 ...
 $ ImageJ    : num [1:70] 26.04 5.16 69.46 82.68 13.13 ...
glimpse(dados)
Rows: 70
Columns: 5
$ Cultura    <chr> "Rosa", "Rosa", "Rosa", "Rosa", "Rosa", "Rosa", "Rosa", "Ro…
$ rep        <dbl> 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,…
$ Assess     <dbl> 19.95, 4.77, 72.11, 81.37, 25.78, 80.45, 81.69, 7.02, 11.23…
$ LeafDoctor <dbl> 31.55, 13.53, 77.59, 90.83, 24.54, 73.84, 86.78, 14.04, 16.…
$ ImageJ     <dbl> 26.04, 5.16, 69.46, 82.68, 13.13, 69.90, 88.66, 6.40, 10.82…

Para acessar uma aba específica (neste caso, a terceira planilha do arquivo), é usado o argumento sheet:

dados2 <- read_excel("dados-diversos.xlsx",
                    sheet = 2)
dados2 <- dados2 |>
  mutate(dose = as.numeric(dose)) #Convertendo a coluna dose para formato numérico
str(dados2)
tibble [240 × 9] (S3: tbl_df/tbl/data.frame)
 $ code       : chr [1:240] "FGT05" "FGT05" "FGT05" "FGT05" ...
 $ year       : num [1:240] 2007 2007 2007 2007 2007 ...
 $ trial      : num [1:240] 1 1 1 1 1 1 1 1 1 1 ...
 $ state      : chr [1:240] "RS" "RS" "RS" "RS" ...
 $ dose       : num [1:240] 0 0 0.05 0.05 0.5 0.5 1 1 5 5 ...
 $ replicate  : num [1:240] 1 2 1 2 1 2 1 2 1 2 ...
 $ germination: num [1:240] 46 44 18 24 9 11 0 0 0 0 ...
 $ ...8       : logi [1:240] NA NA NA NA NA NA ...
 $ ...9       : logi [1:240] NA NA NA NA NA NA ...
glimpse(dados2)
Rows: 240
Columns: 9
$ code        <chr> "FGT05", "FGT05", "FGT05", "FGT05", "FGT05", "FGT05", "FGT…
$ year        <dbl> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007…
$ trial       <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ state       <chr> "RS", "RS", "RS", "RS", "RS", "RS", "RS", "RS", "RS", "RS"…
$ dose        <dbl> 0.00, 0.00, 0.05, 0.05, 0.50, 0.50, 1.00, 1.00, 5.00, 5.00…
$ replicate   <dbl> 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2…
$ germination <dbl> 46, 44, 18, 24, 9, 11, 0, 0, 0, 0, 0, 0, 50, 50, 43, 44, 2…
$ ...8        <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ ...9        <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…

Leitura e Escrita de Arquivos CSV e Excel

É possível ler um arquivo .csv com a função read_csv e, em seguida, exportá-lo para o formato .xlsx, utilizando a função write_xlsx do pacote writexl .

curve <- read_csv("curve.csv")

library(writexl)
write_xlsx(curve, "curva2.xlsx")

Importação de Dados a partir do Google Sheets

Dados armazenados em planilhas do Google podem ser importados diretamente por meio do pacote gsheet:

library(gsheet)
dados_nuvem <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?pli=1&gid=373270992#gid=373270992")
view(dados_nuvem) #possibilita a visualização dos dados

Filtragem, Agrupamento e Contagem

É possível realizar filtragem, agrupamento e contagem de dados no R de forma simples e eficiente utilizando a combinação das funções filter(), group_by() e count() do pacote dplyr.

Para ilustrar essas operações, será utilizado o conjunto de dados survey, importado diretamente de uma planilha do Google Sheets, contendo informações sobre espécies, resíduos e estados brasileiros ao longo dos anos.

survey <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?pli=1&gid=1118819738#gid=1118819738")
view(survey)

Agrupamento e contagem

A função group_by() organiza os dados em grupos com base em uma ou mais variáveis. Em seguida, count() contabiliza quantas observações existem em cada grupo.

No exemplo a seguir, agrupa-se o conjunto survey por state e residue, contando o número de registros de cada tipo de resíduo por estado:

survey |>
  group_by(state, residue) |>
  count()
# A tibble: 3 × 3
# Groups:   state, residue [3]
  state residue     n
  <chr> <chr>   <int>
1 PR    <NA>      216
2 RS    corn      169
3 RS    soybean   281

Filtragem de dados

A função filter() permite selecionar apenas as linhas que atendem a uma condição específica. Por exemplo, para obter apenas os registros do estado do Rio Grande do Sul (RS) e do Paraná (PR):

RS <- survey |>
  filter(state== "RS")
PR <- survey |>
  filter(state== "PR")

Esses dois subconjuntos podem ser combinados em um único conjunto de dados utilizando rbind():

combinado <- rbind(RS, PR)

Seleção de colunas e filtragem por ano

É possível selecionar apenas algumas colunas para facilitar análises específicas. Por exemplo, para trabalhar apenas com as colunas year, state e species pela função dplyr::select

survey_b <- survey |>
  dplyr::select(year, state, species)

survey_b2009 <- survey |>
  dplyr::select(year, state, species) |>
  filter(year==2009)

Tabela de frequência cruzada

Para verificar quantas vezes cada espécie foi registrada em cada ano, é possível gerar uma tabela de frequência cruzada utilizando a função tabyl() do pacote janitor .

library(janitor)
survey_b |>
  tabyl(year, species)
 year Fgra Fspp
 2009  225   40
 2010  187   29
 2011  140   45

Visualização de Dados com ggplot2

Os pacotes tidyverse, ggplot2 e ggthemes serão usados para criar visualizações gráficas eficientes, permitindo uma análise rápida dos dados carregados no dataframe. A seguir, serão apresentados exemplos de gráficos aplicados ao conjunto de dados survey_b.

Visualização de Dados Categóricos com ggplot2

Gráfico de barras por espécie

survey_b |>
  group_by(year, species) |>
  count() |>
  ggplot(aes(species, n)) +
  geom_col()

Agrupa os dados por year e species, conta o número de ocorrências e gera um gráfico de colunas com o número total de registros por espécie. Os anos estão combinados em um único painel.

Gráfico de barras por ano

survey_b |>
  group_by(year, species) |>
  count() |>
  ggplot(aes(year, n)) +
  geom_col()

Facetamento por ano

survey_b |>
  group_by(year, species) |>
  count() |>
  ggplot(aes(species, n)) +
  geom_col() +
  facet_wrap(~year)

A função facet_wrap permite dividir um gráfico em múltiplos painéis, cada um representando um subconjunto dos dados baseado em uma variável categórica, no caso do exemplos os anos.

Gráfico colorido por espécie

survey_b |>
  group_by(year, species) |>
  count() |>
  ggplot(aes(year, n, fill = species)) +
  geom_col() +
  scale_fill_manual(values = c("red", "purple"))

Gráficos de Boxplot para Dados Quantitativos

Além de categorias, também podemos visualizar dados contínuos. A seguir, criam-se gráficos para variáveis numéricas utilizando boxplots, que mostram a mediana, quartis e possíveis outliers.

Boxplot com dados do experimento com magnésio

Os dados utilizados neste gráfico foram importados da planilha online. O conjunto mg contém informações sobre o comprimento de lesões sob diferentes tratamentos com magnésio.

mg <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?pli=1&gid=983033137#gid=983033137")
view(mg)

library(ggthemes)
plot_mg <- mg |>
  ggplot(aes(trat, comp))+
  geom_boxplot(fill = "grey", outlier.color = NA)+
  geom_jitter(width = 0.1, color = "gray50")+
  scale_y_continuous(limits = c(0,20))+
  labs(x= "Tratamento",
       y= "Comprimento (mm)")

Cada tratamento é representado em um boxplot. Pontos individuais são sobrepostos com geom_jitter(), o que ajuda a visualizar a dispersão dos dados.

Boxplot com taxa de crescimento micelial (tcm)

Os dados foram obtidos da planilha online. A variável tcm representa a taxa de crescimento micelial de diferentes espécies. O gráfico abaixo mostra a comparação entre essas espécies:

micelial <- gsheet2tbl("https://docs.google.com/spreadsheets/d/1bq2N19DcZdtax2fQW9OHSGMR0X2__Z9T/edit?pli=1&gid=959387827#gid=959387827")
view(micelial)

plot_micelial <- micelial |>
 ggplot(aes(reorder(especie, tcm), tcm))+
  geom_boxplot(outlier.color = NA)+
  geom_jitter(width = 0.1, color = "gray50")+
  coord_flip()+
  labs(x= "", y= "Taxa de crescimento micelial (mm/dia)")+
  theme_minimal()

Combinação de Gráficos com patchwork

Os dois gráficos anteriores (magnésio e micélio) podem ser combinados em um único painel com o auxílio do pacote patchwork:

library(patchwork)
(plot_mg | plot_micelial) +
  plot_annotation(tag_levels = "a")

Por fim, os gráficos que foram gerados podem ser salvos utilizando a função ggsave. Essa função salva apenaso ultimo grafico gerado.

ggsave("box.png", bg = "white", width = 5, height = 5)